package org.japo.java.swing.beans;

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

public class CeldaFuenteRender extends JLabel implements ListCellRenderer<Object> {

    // Parámetros
    private final int NEGRITA = Font.PLAIN;
    private final int CURSIVA = Font.PLAIN;
    private final int ESTILO = NEGRITA + CURSIVA;
    private final int TALLA = 20;

    public CeldaFuenteRender() {
        setOpaque(true);
    }

    @Override
    public Component getListCellRendererComponent(
            JList<?> lista, // -----  Componente de la lista
            Object valor, // -------- Contenido de la celda
            int posicion, // -------- Posición en la lista
            boolean seleccionOK, // - Celda seleccionada
            boolean focoOK) {    // - Celda con foco

        // Nombre de la fuente actual
        String fuente = valor.toString();

        // Escribe el nombre de la fuente en la celda
        setText(fuente);

        // Instancia la fuente de la celda actual
        Font f = new Font(fuente, ESTILO, TALLA);

        // Aplica la fuente a la celda
        setFont(f);

        // Colores para la celda
        Color background;
        Color foreground;

        // Obtiene la posición de destino de la operación actual 
        // de arrastrar y soltar - DnD
        JList.DropLocation dropLocation = lista.getDropLocation();

        // Comprueba si la celda representa la posición de destino 
        // de la operación actual de arrastrar y soltar
        if (dropLocation != null && // ------------------ Existe DnD
                !dropLocation.isInsert() && // ---------- No inserción
                dropLocation.getIndex() == posicion) { // En posición actual
            background = Color.BLUE;
            foreground = Color.WHITE;

        } else if (seleccionOK) {  // Celda seleccionada
            background = Color.RED;
            foreground = Color.WHITE;

        } else { // Celda no seleccionada y no existe operación DnD
            background = Color.WHITE;
            foreground = Color.BLACK;
        }

        // Aplica colores
        setBackground(background);
        setForeground(foreground);

        return this;
    }
}
